package j19.exception;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.InputMismatchException;
import java.util.Scanner;

public class ExceptionDemo {

	/**异常处理
	 * 异常：
	 * Exception
	 * 	运行时：     RuntimeException
	 * 	checked：Exception,ParseException
	 * 
	 * try
	 * {
	 * 		可能发生异常的代码
	 * }
	 * catch(Exception e//异常类型)可写多个,Exception处理放最后(补充处理不了的异常)
	 * {
	 * 		处理异常的代码
	 * 		String str=e.getMessage();
	 * 		e.printStackTrace();打印异常信息到控制台（错误文件和行数，调试错误！）
	 * }
	 * finally{
	 * 		除System.exit(0)之外，必走
	 * }
	 * 
	 * throw  动作
	 * 		在某种条件下人工抛出异常：
	 *		throw new Exception("异常消息");
	 * throws 声明方法内部可能发生异常
	 * 		谁调用该方法，谁进行异常处理，也可以再声明异常，最后一定要处理异常
	 * 
	 * 流程：
	 * 	1没有try--catch---从发生异常的代码开始，终止程序（jvm介入异常处理）
	 * 
	 * 	2有try-catch ---从try发生异常的代码开始，跳入catch处理，程序继续向下执行
	 * 
	 * 	3有try-catch ---无异常，走完try 不走catch ，程序继续向下执行
	 * 
	 *  4有try-catch ---有异常无匹配异常处理，从发生异常的代码开始，终止程序（jvm介入异常处理）
	 *  
	 *  5finally必走
	 * */
	public static void main(String[] args) {
		
		/**
		 * 使用了异常控制循环,保证了循环能一直走到得到我们自己想要的结果
		 * 
		 * 多次判断,多次抛异常
		 * 
		 * 每当不符合条件就去抛 异常
		 * 
		 * 不断的异常, 让循环中的try-catch,跳出去
		 * 
		 * 然后呢,接着循环呗
		 */
		while (true) {	//这是一个循环,只有全走完,才能break退出去
			
			String name="";
			int age=0;
			String sex="";
			
			try {
				name = InputUtil.getString("请输入名字：");
				if (name.length() > 6)
					throw new Exception("名字长度超过六位！");	//这里不错哦,还能告知哪里错了
				
				age = InputUtil.getIntAdvanced("请输入年龄");
				
				sex = InputUtil.getString("请输入性别：");
				if (!(sex.equals("男") || sex.equals("女")))
					throw new Exception("性别错误！");
				
				break;
			} catch (InputMismatchException e) {
				System.out.println("输入类型错误！");
			} catch (Exception e) {
				System.out.println(e.getMessage());
				System.out.println("-------------------------------------");
				e.printStackTrace();
			} finally{
				System.out.println(name + "," + age + "," + sex);
			}
		}
	}
}

